if _G.RequireLuas ~= nil then
	for _,v in ipairs(_G.RequireLuas) do
		require(v);
	end
end
require("Util");



roles = {};
operaRoles = {};
minDis = 0.1;		--怪物与目标的最小距离，当小于该距离时认为已经与目标接触
minDisP = minDis * minDis;
chaseDis = 16;			--怪物与目标的可追捕距离，当小于该距离时怪物会追捕目标

function Start()
	-- body
end

function Update()
	while true do
		local r = {};
		if _G.action ~= nil then                 --—_G.action[1]为操作码，1玩家进入，2玩家离开，3玩家移动
			coroutine.yield("opera".._G.action[1]);
		elseif _G.action[1] == 1 then                                                --操作码、ID、初始X、初始Y
			roles["r".._G.action[2]] = {id = _G.action[2], x = _G.action[3], y = _G.action[4]};
		elseif _G.action[1] == 2 then                                            --操作码、ID
			roles["r".._G.action[2]] = nil;
		elseif _G.action[1] == 3 then                                            --操作码、ID、目标X、目标Y
			local current = roles["r".._G.action[2]];
			if roles["r1"] == nil then
				coroutine.yield("nillll");
			end
			current.target = {x = _G.action[3], y = _G.action[4]};				--设置移动玩家的最终目标、id、路径、路径索引、当前移动目标
			local s = search(current);
			local t = search(current.target);
			current.id = _G.action[2];
			current.line = line["L"..s.."_"..t];
			current.index = 1;
			current.movetarget = point[current.line[current.index]];
			table.insert(operaRoles, current);
		end
		_G.action = nil;
		local removeIndexs = {};
		for i,v in pairs(operaRoles) do
			if v.target ~= nil then                         	--对有最终移动目标的怪物进行移动
				local currentL = getlenp(v, v.movetarget);		--计算当前位置与移动目标的距离的平方
			if currentL < minDisP then                     	--完成当前移动操作
				if v.line == nil then                      	--到达最终目标点
					table.insert(removeIndexs, i - table.getn(removeIndexs));
				elseif table.getn(v.line) == v.index then  --已走完寻路集合内的所有点
					v.movetarget = v.target;
					v.line = nil;
				else                                       --寻路集合内的点还没走完，需要将当前移动目标修改为下一个移动点
					v.index = v.index + 1;
					v.movetarget = point[v.line[v.index]];
				end
			end
			local xscale, yscale = normalize(v, v.movetarget);
			v.x = v.x + xscale * 0.1;				--角色移动速度未添加
			v.y = v.y + yscale * 0.1;
			table.insert(r, {v.id, v.x, v.y});
			end
		end
		for _,v in pairs(removeIndexs) do 						--从操作表中清除已经到达最终目标的玩家数据
			table.remove(operaRoles, v);
		end
		coroutine.yield(r);
	end
end

function Destory()
	-- body
end

